package sis.ra.evaluation;

import java.io.File;
import java.util.HashMap;
import java.util.TreeSet;

import sis.ra.partofspeech.AlliasAnalysis;
import sis.ra.partofspeech.wordindex;
import sis.ra.relationExtraction.parseYahooResults;
import sis.ra.utility.InxEntity;
import sis.ra.utility.Utils;



public class posAliasNE {

	public static HashMap<Integer, wordindex> posNeAlias(String contents)
	{
		String ne=Utils.getNE(contents);
		HashMap<Integer,InxEntity> nes=Utils.parseIMSXMLContentHash(ne);
		HashMap<Integer,String> aliasindex=AlliasAnalysis.aliasAnalysis(ne);
		TreeSet<Integer> sortedSetne=new TreeSet<Integer>(nes.keySet());
		Object [] sortedArrayne=sortedSetne.toArray();
		HashMap<Integer,wordindex> posresult=parseYahooResults.pos(contents, "text");
		TreeSet<Integer> sortedSet=new TreeSet<Integer>(posresult.keySet());
		Object [] sortedArray=sortedSet.toArray();
		for (int i=0;i<sortedArrayne.length;i++)
		{
			Integer neindexnow=(Integer)sortedArrayne[i];
			Integer posindexnow=neindexnow;
			if (posresult.containsKey(posindexnow)&&nes.get(neindexnow).getSurface().startsWith(posresult.get(posindexnow).getWord()) ) 
			{
				
//				System.out.println(neindexnow+" "+nes.get(neindexnow).getEntityType()+" "+nes.get(neindexnow).getSurface());
				posresult.get(posindexnow).setEntitytype(nes.get(neindexnow).getEntityType());
				posresult.get(posindexnow).setEntity(nes.get(neindexnow).getSurface());	
				if (aliasindex.containsKey(neindexnow))
					posresult.get(posindexnow).setReference(aliasindex.get(neindexnow).split("\t")[1]);
				//System.out.println(neindexnow+" "+nes.get(neindexnow).getEntityType()+" "+nes.get(neindexnow).getSurface());
			}else
			{
				posindexnow=posindexnow-10;
				int loop=0;
				while (!posresult.containsKey(posindexnow)||!nes.get(neindexnow).getSurface().toLowerCase().trim().contains(posresult.get(posindexnow).getWord().toLowerCase().trim()))
				{
					posindexnow=posindexnow+1;
//					System.out.println("=="+posindexnow+" "+nes.get(neindexnow).getSurface().toLowerCase().trim());
					loop=loop+1;
					if (loop>20) break;					
				}
				if (loop>20) 
				{
					neindexnow=(Integer)sortedArrayne[i];
//					posresult.get(neindexnow).setEntitytype(nes.get(neindexnow).getEntityType());
//					posresult.get(neindexnow).setEntity(nes.get(neindexnow).getSurface());		
				}else{
				posresult.get(posindexnow).setEntitytype(nes.get(neindexnow).getEntityType());
				posresult.get(posindexnow).setEntity(nes.get(neindexnow).getSurface());	
				if (aliasindex.containsKey(neindexnow))
					posresult.get(posindexnow).setReference(aliasindex.get(neindexnow).split("\t")[1]);
				}
			}
		}
		return posresult;
	}
	
	public static void main(String[] args) {
		String filepathstr="C:\\Users\\Administrator\\Desktop\\dataset\\testing company\\";//Google_wiki.txt";//wiki//Amazon.com_wiki.txt";
		File filepath=new File (filepathstr);
		File[] files=filepath.listFiles();
		for (int i=0;i<files.length;i++)
		{
			if (!files[i].toString().contains("_wiki.txt")) continue;
		
			String content=Utils.readFile(files[i].toString());//files[i].toString());
			for (int b=1;b<200;b++)
				content=content.replace("["+b+"]", "");
		//	System.out.println(content);
			String xmlfile=Utils.getNE(content);
			HashMap<Integer, wordindex> pna=posNeAlias(content);
			String analysis=seperateWikipediaArticleSentence.toString(pna);
			System.out.println(analysis);
			
			Utils.writeToFile(files[i].toString().replace(".txt", ".pos"), analysis,true, true); 
//			TreeSet<Integer> sortedSet=new TreeSet<Integer>(pna.keySet());
//			Object [] sortedArray=sortedSet.toArray();
//
//			int count=0;
//			String out="";
//			for (int j=0;j<sortedArray.length;j++)
//			{
//				if (entities.get(sortedArray[j]).getEntityType().equals("PERSON")||
//						entities.get(sortedArray[j]).getEntityType().equals("PLACE_REGION")||
//						entities.get(sortedArray[j]).getEntityType().equals("MEASURE")||
//						entities.get(sortedArray[j]).getEntityType().equals("YEAR")||
//						entities.get(sortedArray[j]).getEntityType().equals("DATE")||
//						entities.get(sortedArray[j]).getEntityType().equals("CURRENCY")||
//						entities.get(sortedArray[j]).getEntityType().equals("PERCENT")||
//						entities.get(sortedArray[j]).getEntityType().equals("PERSON_POS")||
//						entities.get(sortedArray[j]).getEntityType().equals("HOLIDAY")||
//						entities.get(sortedArray[j]).getEntityType().equals("CITY")||
//						entities.get(sortedArray[j]).getEntityType().equals("MONTH")||
//						entities.get(sortedArray[j]).getEntityType().equals("TIME_PERIOD")||
//						entities.get(sortedArray[j]).getEntityType().equals("ORGANIZATION")||
//						entities.get(sortedArray[j]).getEntityType().equals("COUNTRY")||
//						entities.get(sortedArray[j]).getEntityType().equals("ADDRESS")||
//						entities.get(sortedArray[j]).getEntityType().equals("FACILITY")
//						)
//					continue;
//				out=sortedArray[j]+"\t"+pna.get(sortedArray[j]).getEntityType()+"\t"+
//						entities.get(sortedArray[j]).getCanoical();	
//				count=count+1;
//				System.out.println(out);
			}
	}
}
